#ifndef DESIGN_PATTERNS_SINGLETON_HPP
#define DESIGN_PATTERNS_SINGLETON_HPP

namespace DesignPatterns {
	class singleton;
}

/// @brief Creational pattern : singleton
class DesignPatterns::singleton
{
private:
	static singleton* m_instance;
public:
	/// Returns a unique instance
        static singleton* get_instance();

	/// simple method
	void do_something();

	/// @name Special member functions
private:
	/// This class is not constructable 
        singleton();
	/// This class is not copy constructable
	singleton(const singleton&);
	/// This class is not assignable
	singleton& operator = (const singleton&);
};

#endif //DESIGN_PATTERNS_SINGLETON_HPP
